﻿'
' Boogaloo® - http://www.mindfly.com
' Copyright (c) 2009
' by Mindfly, Inc.
'
' Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
' documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
' the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
' to permit persons to whom the Software is furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in all copies or substantial portions 
' of the Software.
'
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
' INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
' DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
' SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
' WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Imports System.Web

Namespace Rss

    Public Class RssExtensionNamespace
        Inherits RssBase

        Public Sub New(ByVal abbr As String, ByVal namespace_uri As Uri)
            Me.abbr = GetSafeXml(abbr)
            Me.namespace_uri = namespace_uri
        End Sub


        ''' <summary>
        ''' Returns a unique list of RssExtensionNamespace of extensions found in channel and channel items
        ''' </summary>
        Public Shared Function GetExtensionNamespaces(ByVal channel As RssChannel) As List(Of RssExtensionNamespace)
            Dim dict As New Dictionary(Of String, RssExtensionNamespace)
            GetUniqueExtensionNamespaceDictionary(channel.extensions, dict)
            Dim item As RssItem = Nothing
            If channel.items IsNot Nothing Then
                For Each item In channel.items
                    GetUniqueExtensionNamespaceDictionary(item.extensions, dict)
                Next
            End If
            Dim namespaces As New List(Of RssExtensionNamespace)
            Dim keyval As KeyValuePair(Of String, RssExtensionNamespace) = Nothing
            For Each keyval In dict
                namespaces.Add(keyval.Value)
            Next

            Return namespaces
        End Function


        

        Private Shared Sub GetUniqueExtensionNamespaceDictionary(ByVal extensions As List(Of RssExtension), ByVal dict As Dictionary(Of String, RssExtensionNamespace))

            Dim ext As RssExtension = Nothing
            If extensions IsNot Nothing Then
                For Each ext In extensions
                    If Not dict.ContainsKey(ext.extension_namespace.abbr) Then dict.Add(ext.extension_namespace.abbr, ext.extension_namespace)
                Next
            End If

        End Sub

        Private _abbr As String
        Public Property abbr() As String
            Get
                Return _abbr
            End Get
            Set(ByVal value As String)
                _abbr = value
            End Set
        End Property


        Private _namepace_uri As Uri
        Public Property namespace_uri() As Uri
            Get
                Return _namepace_uri
            End Get
            Set(ByVal value As Uri)
                _namepace_uri = value
            End Set
        End Property


    End Class

End Namespace